class bcj{
    vector<int> p;
    int n;
    public:
    //初始化
    bcj(int n):n(n){
        p.resize(n);
        for(int i=0;i<n;i++)
        {
            p[i]=i;
        }
    }

    //并查集
    int find(int x)
    {
        if(p[x]!=x)
        {
            p[x]=find(x);
        }
        else return p[x];
    }

    //合并
    void unit(int x,int y)
    {
        x=find(x);
        y=find(y);
        if(x==y)
            return;
        else if(x>y)
            swap(x,y);
        f[y]=x;
    }
}
class Solution {
public:
    string smallestEquivalentString(string s1, string s2, string baseStr) {
        bcj p(26);
        for(int i=0;i<s1.size();i++)
        {
            int x=s1[i]-'a';
            int y=s2[i]-'a';
            p.unit(x,y);
        }
        for(int i=0;i<baseStr.size();i++)
        {
            baseStr[i]='a'+p.find(baseStr[i]-'a');
        }
        return baseStr;
    }
};